import pandas as pd
import random
import os
import numpy as np
from pandas import read_csv
from datetime import datetime
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from Bio.Cluster import *
from sklearn import preprocessing
from sklearn.metrics import silhouette_score
from sklearn.model_selection import GridSearchCV

sentences = [
    "都坐半小时了哦(｡•ˇ‸ˇ•｡) 别懒着，起来活动活动啦。",
    "瞧你呀(ಠ_ಠ)，一坐就是三十分钟，还不起来走走嘛？",
    "三十分钟过去咯(っಠ _ ಠ)っ，身体都僵了，赶紧起身动一动哟。",
    "久坐半小时可不是好事哒(╬◣д◢)，麻溜起来活动下筋骨啦。",
    "哼(╭∩╮_╭∩╮)，坐了三十分钟还不动，想等着身体抗议嘛？",
    "已经坐了三十分钟啦(ー`´ー)，别磨蹭，起来活动下身体哈。",
    "哟(￣_,￣ )，三十分钟都过去了，还坐着，起来活动活动呐。",
    "坐满半小时了哟(╥╯^╰╥)，别再瘫着，起来舒展下身体哒。",
    "都久坐三十分钟了喂(┳◇┳)，别犯懒，起身活动活动吧。",
    "三十分钟的久坐可不好呢(｡･ω･｡) 立马起来活动一下呀。"
]

# 定义输入和输出文件夹路径
input_folder = "E:/tiPDM-cup/B/code/data"
output_folder = "../train"  # 新增输出文件夹路径

SLEEP_CHECK = 30

# 获取输入文件夹中所有以 P 开头且以 .csv 结尾的文件
file_list = [f for f in os.listdir(input_folder) if f.startswith('P') and f.endswith('.csv')]
all_filtered_dfs = []

def df_pred(file_path):
    # 修改为使用自定义解析函数读取 CSV 文件
    df = read_csv(file_path, header=0, parse_dates=[0])
    # 手动转换日期列
    df.iloc[:, 0] = pd.to_datetime(df.iloc[:, 0], format='%Y-%m-%d %H:%M:%S.%f')
    # 提取数字部分（如 11585）
    df['class'] = df['annotation'].str.extract(r'(\d+)')
    # 提取 MET 值部分（如 1.5）
    df['MET'] = df['annotation'].str.extract(r'MET\s(\d+(\.\d+)?)')[0]
    # 删除原始第四列（可选）
    df.drop(columns=['annotation'], inplace=True)
    # 将 class 和 MET 列转换为数值类型
    df['class'] = pd.to_numeric(df['class'])
    df['MET'] = pd.to_numeric(df['MET'])
    # 直接将时间列转换为时间戳（毫秒）
    df['timestamp_ms'] = df.iloc[:, 0].astype('int64') // 10**6
    # 按照 timestamp_ms 从小到大排序
    df.sort_values(by='timestamp_ms', inplace=True)
    return df

def sleep_check(df, SLEEP_CHECK, sentences):
    index = 0
    while index < len(df) - SLEEP_CHECK:
        check_time = (df.iloc[index + SLEEP_CHECK, 6] - df.iloc[index, 6]) / (1000 * 60)
        if check_time >= 30:
            random_sentence = random.choice(sentences)
            print(f"{df.iloc[index,0]} 时刻发现久坐超过30分钟!")
            print(random_sentence,"\n")
            
            index += SLEEP_CHECK
        else:
            index += 1

for file_name in file_list:
    file_path = os.path.join(input_folder, file_name)
    try:
        df =  df_pred(file_path)
        df = df[::(100*60)]
        filtered_df = df[(df.iloc[:, 5] >=1) & (df.iloc[:, 5] <= 1.6)]
        # print(df.iloc[1:10])
        sleep_check(filtered_df,SLEEP_CHECK,sentences)

    except Exception as e:
        print(f"Error processing {file_path}: {e}")